package com.jacob.androidframe.base;

import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.FragmentArg;

import android.os.Bundle;

/**
 * 本类是所有Fragment的父类。
 * 用来封装和业务无关的复杂代码。
 * 
 * FragmentForViewPagerBase是专为ViewPager编写的一个Fragment基类。
 * 通过和AdapterPagerFragmentBase、AdapterPagerFragmentStateBase搭配使用，
 * 可以实现调用Adapter.notifyDataSetChanged()方法进行刷新的功能。
 * 
 * @author 王超
 */
@EFragment
public abstract class FragmentForViewPagerBase extends FragmentBase
{
	public static final long INVALID_CUSTOM_ID = -1;
	
	public static final String BUNDLE_KEY_CUSTOM_ID_LONG = "mCustomId";
	
	/** CustomId决定了Fragment的Tag，同一个Adapter中不能包含2个CustomId相同的Fragment。 */
	@FragmentArg(BUNDLE_KEY_CUSTOM_ID_LONG)
	protected long mCustomId = INVALID_CUSTOM_ID;
	
	/**
	 * 和AdapterPagerFragmentBase、AdapterPagerFragmentState搭配使用时，
	 * 每次调用Adapter.notifyDataSetChanged()方法的话，都会调用本方法进行刷新。
	 * 
	 * 子类实现本方法时，必须先调用父类的实现。
	 */
	public void onRefresh(Bundle pBundleArgs)
	{
		if (pBundleArgs != null) {
			mCustomId = pBundleArgs.getLong(BUNDLE_KEY_CUSTOM_ID_LONG, INVALID_CUSTOM_ID);
		}
	}

	public long getCustomId()
	{
		return mCustomId;
	}

}
